# @Time:2021/5/29 20:28
# @Author:5120195554王欣霏
# -*- coding = utf-8 -*-

import os
import pygame
from pygame.constants import QUIT

pygame.init()
background_image = os.path.join('../resource', 'img', 'village.jpg')
# print(pygame.display.Info())
# 1.屏幕模式函数pygame.display.set_mode(r = (0,0),flags = 0)
# r是游戏屏幕的分辨率 采用(width,height)方式输入
# flags用来控制显示类型 可通过|组合使用  常用标签：pygame.RESIZABLE窗口大小可调 pygame.NOFRAME窗口没有边界显示 pygame.FULLSCREEN窗口全屏显示
# screen = pygame.display.set_mode((800,600),0,32)
screen = pygame.display.set_mode((800, 600), pygame.RESIZABLE)
# pygame.display.set_mode()表示初始化一个窗口，返回的就是一个surface对象，这个对象就是一个要在屏幕上显示的内容
# 无论想在窗口里面显示什么内容（也就是surface对象）都得直接或者间接把能容绑定在窗口上

# 2.屏幕信息函数pygame.display.Info()
# 产生一个显示信息对象VideoInfo 表达当前屏幕的参数信息
# 在set_mode()前调用 则显示当前系统显示参数信息
# 重要参数： current_w：当前显示模式或窗口的像素宽度  current_h：当前显示模式或窗口的像素高度
# print(pygame.display.Info())

# 3.窗口标题和图标函数pygame.display.set_caption(title,icontitle=None)
# title：设置窗口的标题内容
# icontitle：设置图表化后的小标题（可选）
# pygame.display.set_caption("123")

# 4.窗口标题和图标函数pygame.display.get_caption()
# 返回当前设置窗口的标题及小标题内容
# 返回结构为(title,icontitle)
# 该函数与游戏交互逻辑配合 可根据游戏情节修改标题内容

# 5.窗口标题和图标函数pygame.display.set_icon(surface)
# 设置窗口的图标效果
# 图标是一个surface对象
# icon = pygame.image.load("../resource/img/button/no.png") #载入图片
# pygame.display.set_icon(icon)

# 6.屏幕控制的重要函数pygame.display.get_active()
# 当窗口在系统中显示(屏幕绘制/非图表化)时返回true,否则返回false
# 该函数可以用来判断是否游戏窗口被最小化
# 进一步判断后可以暂停游戏 改变相应模式等

# 7.pygame.display.flip()重新绘制整个窗口
# 8.pygame.display.update()仅重新绘制窗口中有变化的区域 比flip()执行的更快

# 精灵和精灵组
# 在上面的案例中 图像加载、位置变换、绘制图像都需要程序员编写代码分别处理
# 为了简化开发步骤 pygame提供了两个类pygame.sprite.Sprite存储图像数据image和位置rect的对象  pygame.sprite.group
# 精灵：通常把显示图像的对象叫做精灵sprite
# 精灵（需要派生子类） image记录图像数据 rect记录在屏幕上的位置
#                 update(*args)更新精灵的位置（啥也没干。子类可以重写，每次刷新的时候更新精灵的位置） kill()从所有组中删除
# 精灵组：可以包含多个精灵对象
# 精灵组 __init__(self,*精灵)：
#     add(*sprites)向组中增加精灵 sprites()返回所有精灵列表
#     update(*args)让组中所有精灵调用update方法 draw(Surface)将组中所有精灵的image绘制在Surface的rect位置


# 碰撞检测

# 两个精灵之间的矩阵检测
# pygame.sprite.collide_rect(first,second) 返回布尔型  并且精灵必须有一个rect属性

# 精灵组之间的矩阵检测
# collide_list=pygame.sprite.spritecollide(sprite,group,False)
# 第一个参数是精灵 第二个参数是精灵组 第三个参数为True则碰撞检测后组中所有碰撞的精灵都被删除
# 第四个参数是设置一个回调函数，用于指定特殊的检测方法。如果该参数忽略，那么默认是检测精灵之间的rect是否产生重叠（圆形碰撞时要指定这个第四个参数，并且要有radius属性）
# 返回组中被碰撞的精灵

# 两个组之间的矩形检测
# hit_list=pygame.sprite.groupcollide(group1,group2,True,False)
# 前两个参数都是组 后两个参数代表发生碰撞时是否删除精灵
# 该函数返回一个字典
# 第一个组中的每一个精灵都会添加到字典中
# 第二个组中与之碰撞的精灵会添加到字典相应的条目中
background = pygame.image.load(background_image).convert()
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            exit()
    screen.blit(background, (0, 0))
    pygame.display.update()
